package com.atguigu.gulimail.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

/*跨域请求得过滤器,*/
@Configuration
public class GulimailCorsConfiguration {
    //添加CorsWebFilter到容器中//使用spring boot提供得CorsWebFilter 过滤器 放在容器 起到解决跨域请求得问题
    @Bean
    public CorsWebFilter corsWebFilter(){
        // CorsConfigurationSource接口有个实现类UrlBasedCorsConfigurationSource

        //创建corsConfiguration，所有跟跨域相关得配置写在corsConfiguration对象中
        CorsConfiguration corsConfiguration = new CorsConfiguration();


        //4是否携带cookie进行跨域 允许携带所有的cookie进行跨域 防止跨域时丢失跨域信息
        corsConfiguration.setAllowCredentials(true);
        //1，配置跨域头 允许所有的请求头进行跨域
        corsConfiguration.addAllowedHeader("*");
        //2配置跨域请求，允许所有的请求进行跨域
        corsConfiguration.addAllowedMethod("*");
        //3配置跨域请求来源 允许所有的请求来源都可以进行跨域
        corsConfiguration.addAllowedOrigin("*");


        //构造跨域得配置对象，
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        //跨域配置对象调用registerCorsConfiguration()注册跨域配置的方法
        // 第一个参数/** 表示任意路径都要进行跨域配置
        source.registerCorsConfiguration("/**",corsConfiguration);
        return  new CorsWebFilter(source);
    }
}
